package com.loop.nio;

import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @author zhangxiaolu
 * @since 2023-09-03 21:29
 */
public class MappedByteBufferTest {

    public static void main(String[] args) throws  Exception {

        // MappedByteBuffer可以让文件直接在内存（堆外）中修改，而无需写入磁盘，从而提高效率。
        RandomAccessFile rw = new RandomAccessFile("1.txt", "rw");
        FileChannel channel = rw.getChannel();
        /**
         *  参数1：使用的读写模式
         *  参数2：可以直接修改的起始位置
         *  参数3：是映射到内存的大小，即将1.txt的多少个字节映射到内存
         *  可以直接修改的范围就是0-5
         */
        MappedByteBuffer mappedByteBuffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
        mappedByteBuffer.put(0, (byte)'H');
        mappedByteBuffer.put(3, (byte)'8');
//        mappedByteBuffer.put(5, (byte)'8');// 下标越界

        rw.close();
        channel.close();
        System.out.println("修改成功");

    }
}
